import axios from "axios";
import { notification, showMessage } from '@/composables/util'
import { getToken } from '@/composables/auth'
import store from "@/store";
import { Console } from "windicss/utils";

const instance = axios.create({
    baseURL: import.meta.env.VITE_APP_BASE_API,
    // baseURL: '/',
    timeout: 7000
});

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    const token = getToken()
    console.log('请求URL:', config.url)
    console.log('请求方法:', config.method)
    console.log('请求数据:', config.data)
    
    // 检查是否需要跳过认证
    if (config.skipAuthCheck) {
        console.log('跳过认证检查，不添加Token')
        return config
    }
    
    console.log('统一添加 token: ' + token)

    // 统一添加请求头 Token
    if (token) {
        config.headers['Authorization'] = 'Bearer ' + token
    }

    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    console.log('响应URL:', response.config.url)
    console.log('响应状态:', response.status)
    console.log('响应数据:', response.data)
    return response.data;
}, function (error) {
    // 对响应错误做点什么
    // 添加防御性检查，确保error.response存在
    if (error.response) {
        let status = error.response.status
        console.log('错误响应URL:', error.config.url)
        console.log('错误响应状态码:', status)
        console.log('错误响应数据:', error.response.data)
        if (status == 401 || status == 402) {
            console.log('401认证失败-------------')
            store.dispatch('logout').finally(() => location.reload())
        }

        if (error.response.data) {
            let isSuccess = error.response.data.success
            console.log('错误响应成功标志==========》' + isSuccess)
            if (!isSuccess) {
                console.log('error: ' + error.response.data.message)
                let message = error.response.data.message || '请求失败'
                console.error('API请求失败:', message)
                // todo 失效的情况
                // notification(message, 'error')
                showMessage(message, 'error')
            }
        }
    } else {
        // 网络错误或服务器未响应
        console.error('网络错误或服务器未响应:', error.message || '未知错误')
        showMessage('网络错误或服务器未响应，请检查网络连接或服务器状态', 'error')
    }

    return Promise.reject(error);
});

// 暴露
export default instance